package main

import "fmt"

func main() {
	var arr1 [5] int
	fmt.Println(arr1)
	// [0,0,0,0,0]
	
	//需要初始化
	//arr2 := [5]int{0,1,2,3,4}
	arr2 := [5]int{1:100,4:400}
	fmt.Println(arr2)
	// [0,1,2,3,4]
	arr2[0]=100
	fmt.Println(arr2)
	
	//赋值
	for i:=0; i<len(arr1); i++{
		arr1[i]=i
	}
	fmt.Println(arr1)

	//range取值
	//1.只取key
	for key,_ := range arr2{
		arr2[key] = key*100
	}
	//2.取key和value ,必须都使用，否则报错
		//for key,value := range arr2
	//3.只取value值
	for _,value := range arr2{
		fmt.Println(value )
	}

	//二元数组
	var arr3 [2][3] int
	arr3[0][1] = 100
	fmt.Println(arr3)

	fmt.Println("------------------------------")

	//切片
	var slice1 []int
	fmt.Println(slice1)
	var slice2 []int = make([]int, 5)
	fmt.Println(slice2)
	slice3 := make([]int, 5)
	fmt.Println(slice3)

	//通过对数组切片，初始化数据
	slice4 := arr2[0:2]
	fmt.Println(slice4)
	
	slice5 := slice4
	fmt.Println(slice5)
	slice6 := arr2[:]
	fmt.Println(slice6)

	// len, cap
	fmt.Println(len(slice3), cap(slice3))
	fmt.Println(len(arr3), cap(arr3))
	fmt.Println(len(arr2), cap(arr2))
	
	//追加
	slice2 = append(slice2, 500)
	fmt.Println(slice2)
	slice2 = append(slice2, 600, 700)
	fmt.Println(slice2)
	slice6 = append(slice6, 600, 700)
	fmt.Println(slice6)

	//拷贝
	copy(slice2,slice1)
	fmt.Println(slice1,slice2)


	//数组传递的是数值
	arr4 := [3]int{1,2,3}
	arr5 := arr4
	fmt.Println(arr4,arr5)
	fmt.Println(&arr4[0],&arr5[0])
	arr4[0] = 100
	fmt.Println(arr4,arr5)

	//切片传递的是地址
	slice7 := []int{1,2,3}
	slice8 := slice7
	fmt.Println(slice7,slice8)
	fmt.Println(&slice7[0],&slice8[0])
	slice7[0] = 100 
	fmt.Println(slice7,slice8)


}
